﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;

namespace CoayBookDownloader
{
    public class IntelligentManagement
    {
        //声明委托
        public delegate void ParsedWebEventHandler(Object sender, ParsedWebEventArgs e);
        public event ParsedWebEventHandler ParsedWeb; //声明事件


        // 定义ParsedWebEventArgs类，传递给Observer所感兴趣的信息
        public class ParsedWebEventArgs : EventArgs 
        {
            public readonly ParseWebResult res;
            public ParsedWebEventArgs(ParseWebResult res) 
            {
                this.res = res;
            }
        }
        
        // 可以供继承自 IntelligentManagement 的类重写，以便继承类拒绝其他对象对它的监视
        protected virtual void OnParsedWeb(ParsedWebEventArgs e) 
        {
            if (ParsedWeb != null) 
            { // 如果有对象注册
                ParsedWeb(this, e);  // 调用所有注册对象的方法
            }
        }

        // 入口。
        public void Entry() 
        {
            Trace.WriteLine("Entry");
            ParsedWeb += MakeAlert;

            //开启Parse web 线程
            Thread th = new Thread(ParseWebThreadProc);
            th.Start();
        }

        public void ParseWebThreadProc()
        {
            Trace.WriteLine("ParseWebThreadProc start");

            ParseWeb m_ParseWeb = new ParseWeb("http://www.coay.com");

            List<ParseWebResult> list=m_ParseWeb.StartParse();
            if (list != null)
            {
                foreach (ParseWebResult res in list)
                {
                    Trace.WriteLine(res.ToString());

                    //建立ParsedWebEventArgs 对象。
                    ParsedWebEventArgs e = new ParsedWebEventArgs(res);
                    OnParsedWeb(e);  // 调用 OnBolied方法

                }
                
            }

            Trace.WriteLine("ParseWebThreadProc end");
        }

        public void MakeAlert(Object sender, IntelligentManagement.ParsedWebEventArgs e)
        {
            IntelligentManagement im = (IntelligentManagement)sender;     //这里是不是很熟悉呢？
            //访问 sender 中的公共字段

            // Console.WriteLine("Alarm：{0} - {1}: ", heater.area, heater.type);
            //Console.WriteLine("Alarm: 嘀嘀嘀，水已经 {0} 度了：", e.temperature);
            Trace.WriteLine("MakeAlert");
            Trace.WriteLine(e.res.ToString());
        }
    }

    //public class ParseWebThread()
    //{
    //    private String Msg;
    //    private CallBackDelegate callback;

    //    public ParseWebThread(String msg,CallBackDelegate callBackDelegate)
    //    {
    //        Msg=msg;
    //        callback=callBackDelegate;
    //    }

    //    public void ThreadProc()
    //    {
    //        Console.WriteLine("ParseWebThread: 开始执行 ..");
    //        Console.WriteLine("ParseWebThread: 传入的消息: {0}", Message);
    //        if (callback != null)
    //        {
    //            callback("谢谢, 我很好呀!");  // 通过委托, 将数据回传给回调函数
    //        }
    //    }
    //}

    //public class DownloadThread()
    //{
    //    private String Msg;
    //    private CallBackDelegate callback;

    //    public DownloadThread(String msg,CallBackDelegate callBackDelegate)
    //    {
    //        Msg=msg;
    //        callback=callBackDelegate;
    //    }

    //    public void ThreadProc()
    //    {
    //        Console.WriteLine("DownloadThread: 开始执行 ..");
    //        Console.WriteLine("DownloadThread: 传入的消息: {0}", Message);
    //        if (callback != null)
    //        {
    //            callback("谢谢, 我很好呀!");  // 通过委托, 将数据回传给回调函数
    //        }
    //    }
    //}
}
